﻿using System;
using System.IO;
using System.Data;
using System.Windows;
using System.Collections;
using System.Windows.Input;
using System.ComponentModel;
using System.Windows.Controls;
using Sinacor.Infra.UI.Common;
using Sinacor.Infra.UI.Controls;
using Sinacor.Infra.UI.Controls.SmartClient;
using System.Collections.Generic;
using Sinacor.Infra.UI.Controls.SmartClient.Validation;
using Sinacor.UI.Bovespa.Clientes.Presenter;
namespace Sinacor.UI.Bovespa.Clientes.View.SmartClient
{
    /// <summary>
    /// Janela de Cadastros de Tipos de Contas
    /// </summary>
    public partial class CadastroTiposContasClientes : SinacorWindow, ICadastroTipoConta
    {
        #region Campos
        private Presenter.CadastroTipoConta _cadastroTipoConta;
        #endregion

        #region Propriedades
        /// <summary>
        /// Presenter de Cadastro de Tipos de Conta
        /// </summary>
        public Presenter.CadastroTipoConta CadastroTipoConta
        {
            get { return _cadastroTipoConta; }
            set { _cadastroTipoConta = value; }
        }
        #endregion

        #region Construtor
        /// <summary>
        /// Construtor Padrão
        /// </summary>
        public CadastroTiposContasClientes()
        {
            InitializeComponent();

            _cadastroTipoConta = new CadastroTipoConta(this);
            this.AfterInitialize += new RoutedEventHandler(CadastroTiposContasClientes_AfterInitialize);
            this.DataContext = _cadastroTipoConta;
            this.DtgTiposConta.NewItemType = typeof(Model.TipoConta);

        }

        #endregion

        #region Eventos da Tela
        /// <summary>
        /// Inicialização
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        void CadastroTiposContasClientes_AfterInitialize(object sender, RoutedEventArgs e)
        {
            
            this.BtnSelecionarCliente.OnBufferedClick += new SinacorButton.OnBufferClickHandler(BtnSelecionarCliente_OnBufferedClick);
            this.BtnPesquisar.OnBufferedClick += new SinacorButton.OnBufferClickHandler(BtnPesquisar_OnBufferedClick);
            this.BtnNovaPesquisa.OnBufferedClick += new SinacorButton.OnBufferClickHandler(BtnNovaPesquisa_OnBufferedClick);
            this.DtgTiposConta.EndingInsert += new CancelItemEventHandler(DtgTiposConta_EndingInsert);
            this.DtgTiposConta.EndingUpdate += new CancelItemEventHandler(DtgTiposConta_EndingUpdate);
            this.DtgTiposConta.Deleting += new CancelItemsEventHandler(DtgTiposConta_Deleting);
            this.DtgTiposConta.CancelingInsert += new CancelItemEventHandler(DtgTiposConta_CancelingInsert);
            this.DtgTiposConta.CancelingUpdate += new CancelItemEventHandler(DtgTiposConta_CancelingUpdate);
            this.CadastroTipoConta.Inicializar();
        }

        /// <summary>
        /// Deleção de registros
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        void DtgTiposConta_Deleting(object sender, CancelItemsEventArgs e)
        {
            if (e.OriginalSource is SinacorDataGrid)
            {
                this.ClearServiceErrors();

                ModelCollection<Model.TipoConta> tiposContas = new ModelCollection<Sinacor.UI.Bovespa.Clientes.Model.TipoConta>();

                foreach (ItemInfo info in e.ItemsInfo)
                {
                    tiposContas.Add((Model.TipoConta)info.Item);
                }

                if (!this.CadastroTipoConta.ExcluirTipoConta(tiposContas))
                    e.Cancel = true;
            }
        }
        /// <summary>
        /// Atualização de registros
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        void DtgTiposConta_EndingUpdate(object sender, CancelItemEventArgs e)
        {
            if (e.OriginalSource is BaseRow) 
            {
                this.ClearServiceErrors();
                
                e.Cancel = !this.CadastroTipoConta.AlterarTipoConta((Model.TipoConta)e.ItemInfo.Item);
            }
        }

        /// <summary>
        /// Inserção de registros
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        void DtgTiposConta_EndingInsert(object sender, CancelItemEventArgs e)
        {
            if (e.OriginalSource is BaseRow)
            {
                this.ClearServiceErrors();

                e.Cancel = !this.CadastroTipoConta.IncluirTipoConta((Model.TipoConta)e.ItemInfo.Item);
            }
        }

        /// <summary>
        /// Cancela a atualização
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        void DtgTiposConta_CancelingUpdate(object sender, CancelItemEventArgs e)
        {
            if (e.OriginalSource is BaseRow)
            {
                this.ClearServiceErrors();
            }
        }

        /// <summary>
        /// Canecela a inclusão
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        void DtgTiposConta_CancelingInsert(object sender, CancelItemEventArgs e)
        {
            if (e.OriginalSource is BaseRow)
            {
                this.ClearServiceErrors();
            }
        }
        
        /// <summary>
        /// Limpar campor de pesquisa
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        /// <param name="clickCount"></param>
        void BtnNovaPesquisa_OnBufferedClick(object sender, RoutedEventArgs e, int clickCount)
        {
            this.LimparCampos(ExpPesquisa);
            this.CadastroTipoConta.ListaTipoConta = new ModelCollection<Sinacor.UI.Bovespa.Clientes.Model.TipoConta>();
            this.AtualizarTipoConta();
        }

        /// <summary>
        /// Pesquisar dados
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        /// <param name="clickCount"></param>
        void BtnPesquisar_OnBufferedClick(object sender, RoutedEventArgs e, int clickCount)
        {
            this.MoveFocus(new TraversalRequest(FocusNavigationDirection.Next));
            this.MoveFocus(new TraversalRequest(FocusNavigationDirection.Previous));

            this.CadastroTipoConta.ConsultarTiposConta();
        }

        /// <summary>
        /// Selecionar Cliente (tela de pesquisa de clientes)
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        /// <param name="clickCount"></param>
        void BtnSelecionarCliente_OnBufferedClick(object sender, RoutedEventArgs e, int clickCount)
        {
            PesquisaClientes pesquisaClientes = new PesquisaClientes();
            pesquisaClientes.Owner = this;
            pesquisaClientes.SetMenuHeader("Bovespa.Clientes.Label.CadastroTipoContasClientes");
            pesquisaClientes.WindowState = WindowState.Normal;
            pesquisaClientes.IsEnableAceitar = true;
            Model.PesquisaCliente cliente = new Sinacor.UI.Bovespa.Clientes.Model.PesquisaCliente();
            cliente.Apelido = TxtApelidoCliente.Text;
            pesquisaClientes.CarregaParametros(Sinacor.UI.Bovespa.Clientes.Model.Enum.JanelaChamada.CadastroTiposContasClientes, cliente);
            pesquisaClientes.ShowDialog();

            this.TxtApelidoCliente.Text = pesquisaClientes.PesquisaClienteModel.Apelido;
        }

        /// <summary>
        /// Key up (tela de Pesquisa de Clientes)
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void SinacorInt32TextBox_KeyUp(object sender, KeyEventArgs e)
        {
            if (e.IsUp)
            {
                if (e.Key == Key.F3)
                {
                    //abrir janela de clientes
                    PesquisaClientes pesquisaClientes = new PesquisaClientes();
                    pesquisaClientes.Owner = this;
                    pesquisaClientes.SetMenuHeader("Bovespa.Clientes.Label.CadastroTipoContasClientes");
                    pesquisaClientes.WindowState = WindowState.Normal;
                    pesquisaClientes.IsEnableAceitar = true;
                    Model.PesquisaCliente cliente = new Sinacor.UI.Bovespa.Clientes.Model.PesquisaCliente();
                    //cliente.Codigo = ((SinacorInt32TextBox)sender).Value;
                    pesquisaClientes.CarregaParametros(Sinacor.UI.Bovespa.Clientes.Model.Enum.JanelaChamada.CadastroTiposContasClientes, cliente);
                    pesquisaClientes.ShowDialog();

                    ((Model.TipoConta)(DtgTiposConta.EditItem)).ApelidoCliente = pesquisaClientes.PesquisaClienteModel.Apelido;
                    ((Model.TipoConta)(DtgTiposConta.EditItem)).CodigoCliente = pesquisaClientes.PesquisaClienteModel.Codigo;

                }

            }
        }

        /// <summary>
        /// Validar Cliente digitado e retornar o apelido
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void SinacorInt32TextBox_LostFocus(object sender, RoutedEventArgs e)
        {
            if (((SinacorInt32TextBox)sender).Value != null)
            {
                if (!this.CadastroTipoConta.ValidarCliente(((SinacorInt32TextBox)sender).Value.Value))
                    this.Focus();
                else
                    this.MoveFocus(new TraversalRequest(FocusNavigationDirection.Next));

            }
        }

        #endregion

        #region ICadastroTipoConta Members
        /// <summary>
        /// Apresenta Apelido do Cliente no Grid
        /// </summary>
        /// <param name="apelido"></param>
        public void ApresentarApelidoCliente(string apelido)
        {
            //((Model.TipoConta)(DtgTiposConta.EditItem)).ApelidoCliente = pesquisaClientes.PesquisaClienteModel.Apelido;
            ((Model.TipoConta)(DtgTiposConta.EditItem)).ApelidoCliente= apelido;
        }

        /// <summary>
        /// Atualizar Grid
        /// </summary>
        public void AtualizarTipoConta()
        {
            this.DtgTiposConta.UpdateTarget(SinacorDataGrid.ItemsSourceProperty);
        }
        /// <summary>
        /// Confirmação de Exclusão de dados
        /// </summary>
        /// <returns></returns>
        public bool ConfirmarExclusaoTipoConta()
        {
            return (SinacorMessageBox.Show(this.FindResource("Bovespa.Cliente.Message.ConfirmaExclusaoTipoConta").ToString(), SinacorMessageBoxButton.YesNo, SinacorMessageBoxImage.Question) == SinacorMessageBoxResult.Yes);
        }

        /// <summary>
        /// Informar Clinte Inválido
        /// </summary>
        public void InformarClienteInvalido()
        {
            SinacorMessageBox.Show(this.FindResource("Bovespa.Cliente.Message.ClienteInvalido").ToString(), SinacorMessageBoxButton.Ok, SinacorMessageBoxImage.Exclamation);
        }

        /// <summary>
        /// Informar Nenhum Tipo de Conta Selecionado
        /// </summary>
        public void InformarNenhumTipoContaSelecionado()
        {
            SinacorMessageBox.Show(this.FindResource("Bovespa.Cliente.Message.SelecioneTipoConta").ToString(), SinacorMessageBoxButton.Ok, SinacorMessageBoxImage.Exclamation);
        }

        /// <summary>
        /// Informar Tipo de Conta Alterado com sucesso
        /// </summary>
        public void InformarTipoContaAlteradoSucesso()
        {
            SinacorMessageBox.Show(this.FindResource("Bovespa.Corretagem.Message.AlteracaoRealizadaSucesso").ToString(), SinacorMessageBoxButton.Ok, SinacorMessageBoxImage.Information);
        }

        /// <summary>
        /// Informar Tipo de Conta excluido com sucesso
        /// </summary>
        public void InformarTipoContaExcluidoSucesso()
        {
            SinacorMessageBox.Show(this.FindResource("Bovespa.Corretagem.Message.ExclusaoRealizadaSucesso").ToString(), SinacorMessageBoxButton.Ok, SinacorMessageBoxImage.Information);
        }

        /// <summary>
        /// Informar Tipo Conta Incluido
        /// </summary>
        public void InformarTipoContaIncluidoSucesso()
        {
            SinacorMessageBox.Show(this.FindResource("Bovespa.Corretagem.Message.InclusaoRealizadaSucesso").ToString(), SinacorMessageBoxButton.Ok, SinacorMessageBoxImage.Information);
        }

        /// <summary>
        /// Informar usuário não é acessor
        /// </summary>
        public void InformarUsuarioNaoAcessor()
        {
            SinacorMessageBox.Show(this.FindResource("Bovespa.Cliente.Message.ClienteInvalidoAssessor").ToString(), SinacorMessageBoxButton.Ok, SinacorMessageBoxImage.Exclamation);
        }

        /// <summary>
        /// Informar Nenhum registro encontrado
        /// </summary>
        public void InformarNenhumRegistroEncontrado()
        {
            SinacorMessageBox.Show(this.FindResource("Bovespa.Cliente.Message.NenhumRegistroEncontrado").ToString(), SinacorMessageBoxButton.Ok, SinacorMessageBoxImage.Exclamation);
        }

        #endregion
    }
}
